package com.hayato.gpstweet.controller.twitter;

import java.util.List;

import org.slim3.controller.Controller;
import org.slim3.controller.Navigation;

import twitter4j.Status;
import twitter4j.TwitterException;

import com.hayato.gpstweet.service.TwitterService;

public class TimelineController extends Controller {

    private TwitterService service = new TwitterService();

    @Override
    public Navigation run() throws Exception {
        // タイムラインの取得
        List<Status> statusList = service.getTimeline();
        requestScope("tweets", statusList);
        // リクエストから位置情報を取得する
        Double latitude = asDouble("latitude");
        Double longitude = asDouble("longitude");
        // GoogleMapsの画像URI作成
        createMap(latitude, longitude);
        return forward("show.jsp");
    }

    // GoogleMapsの画像URI作成
    private void createMap(Double latitude, Double longitude)
            throws TwitterException {
        
        // ツィートの位置情報をmarkers形式で取得する
        String tweetLocation = getTweetLocation();
        // ズームレベルをリクエストから取得する
        Integer mapzoom = asInteger("mapzoom");
        // GoogleMapの画像URI作成
        String mapURI = 
            service.getMapURI(latitude, longitude, tweetLocation, mapzoom);
        requestScope("mapURI", mapURI);
    }
    
    // ツィートの位置情報をmarkers形式で取得する
    private String getTweetLocation() {
        List<Status> statusList = requestScope("tweets");
        // ツィートの位置情報をmarkers形式にする
        String tweetLocation = "";
        for (int i = 0; i < statusList.size(); i++) {
            Status status = statusList.get(i);
            if (status.getGeoLocation() != null) {
                tweetLocation +=
                    "&markers=label:" + i + "|size:mid|color:red|"
                        + status.getGeoLocation().getLatitude() + ","
                        + status.getGeoLocation().getLongitude() + "&";
            }
        }
        return tweetLocation;
    }
}
